const cp = require('child_process')
const { resolve } = require('path')

;(async () => {
    const script = resolve(__dirname, '../crawler/trailer-list')
    const child = cp.fork(script, [])
    let invoked = false

    // 进程报错时
    child.on('error', err => {
        if(invoked) return

        invoked = true

        console.log(err)
    })

    // 进程退出时
    child.on('exit', code => {
        if(invoked) return

        invoked = false
        let err = code === 0 ? null : new Error('exit code' + code)

        console.log(err)
    })

    // 消息的获取
    child.on('message', data => {
        let result = data.result

        console.log(result)
    })
})()

/**
 * 涉及到几个概率
 * 1, child_process => fork 可以派生出一个子进程
 * 2, 子进程 跟event emit(事件循环机制)有很大关系，子进程继承了event emit，所以对于child可以使用on的方式来注册监听的函数，
 *    比如err, exit, message
 */